// PROGRAMA : ESTPC071
// PROGRAMA : ESTPC071
// SISTEMA : SISP - MODULO DE ESTATISTICA R/F
// SISTEMA : SISP - MODULO DE ESTATISTICA R/F
// CLIENTE : SEGUP
// CLIENTE : SEGUP
// PROGRAMADOR : EDU/FM DATA: 07/03/94
// PROGRAMADOR : EDU/FM DATA: 07/03/94
// OBJETIVO : CONSULTA/EMISSAO QUADRO ESTATISTICO. CEV
// OBJETIVO : CONSULTA/EMISSAO QUADRO ESTATISTICO. CEV
// ATUALIZACOES
// ATUALIZACOES
// RESPONSAVEL DATA
// RESPONSAVEL DATA
// X-X 99/99/99
// X-X 99/99/99
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Estte071Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Estpc071A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Esttc071;
import br.com.vti.sisp_sicrim.antigo.model.SicEstatistica;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.model.Sislct01;
import br.com.vti.sisp_sicrim.antigo.model.Sisldat8;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Estpc071 OBJETIVO : CONSULTA/EMISSAO QUADRO ESTATISTICO. CEV *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/estpc071")
public class Estpc071 {
	// Views utilizadas
	SicEstatistica vwCadest = new SicEstatistica();
	// Telas/relatorios utilizados
	Estte071Report report;
	Estpc071A estpc071A;
	Esttc071 esttc071;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	Sislct01 sislct01 = new Sislct01();
	Sisldat8 sisldat8 = new Sisldat8();
	Sisll001 sisll001 = new Sisll001();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Estpc071 estpc071Anterior;
	String faseproc = "0";

	// private int[] mat0 = new int[14];
	// private int[][] tra0 = new int[12][15];
	private String[] conimp = new String[3];
	// private int[] mat1 = new int[51];
	private int[][] tra1 = new int[12][52];
	private int k = 0;
	private int l = 0;
	private int tempo = 0;
	private int i = 0;
	private String motida = "";
	private String mod = "";
	private int tip = 0;
	private int dat = 0;
	// private int mat = 0;
	private String motid2 = "";
	private int da2 = 0;
	private int ttt = 0;
	private String[] tabm = { null, "   ", "VEI", "CON", "MUL", "   ", "IPV", "ROU", "   ", "   ", "   ", "   ", "   ", "IDC", "   ", "FUN", "   ", "   " };

	private Estpc071A preMapas() {
		estpc071A = new Estpc071A(true, sessao);
		esttc071 = new Esttc071(true, sessao);
		tra1 = new int[12][52];
		esttc071.setDataCorrente(UtilBean.inverteDataCorrente());
		sisldat8.datini = UtilBean.obtemDataCorrente();
		sisldat8.datfim = UtilBean.obtemDataCorrente();
		// Par�grafo: rp0()
		return estpc071A;
	}

	public Estpc071(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Estpc071A estpc071A, Esttc071 esttc071) {
		try {
			main(estpc071A, esttc071);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Estpc071A pestpc071A, Esttc071 pesttc071) throws Exception {
		int i1, i2;

		if (pesttc071 == null && pestpc071A == null) {
			primeiraVez = true;
			// esttc071 = new Esttc071 (primeiraVez);
			estpc071A = preMapas();
			estpc071A.setNavegar("../estpc071/executar");
			result.include("estpc071A", estpc071A);
			sessao.setAtributo("ESTPC071", this);
			estpc071A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pestpc071A, pesttc071);
		}

		// DEFINE PRINTER(BUC = 1)
		report = new Estte071Report();

		report.setEmpresa(estpc071A.getEmpresa());
		estpc071A.setOpcao("C");
		for (i1 = 1; i1 <= 11; i1++)
			for (i2 = 1; i2 <= 14; i2++)
				esttc071.setTra0(i1, i2, 0);
		for (i1 = 0; i1 < 14; i1++)
			esttc071.setMat0(i1, 0);
		for (i1 = 1; i1 <= 50; i1++)
			report.setMat1(i1, 0);

		conimp = new String[3];

		tra1 = new int[12][52];
		k = 0;
		estpc071A.setMat(0);

		if (pestpc071A != null) {
			estpc071A.receberTela(false, result);
		}
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			estpc071A.enviarMensagem(null, "");
			validacaoMensagem();
			return;
		}
		if (!esttc071.getOperacao().equals("CER")) {
			funcoes.sissm001(result, sessao);
		}
		if (!UtilBean.validarMascara(sisldat8.datini, "yyyyMMdd")) {
			estpc071A.enviarMensagem("operacao", "");
			validacaoMensagem();
			return;
		}
		if (estpc071A.getAdt() < 1994) {
			estpc071A.enviarMensagem("adt", "");
			validacaoMensagem();
			return;
		}
		if (!UtilBean.validarMascara(sisldat8.datfim, "yyyyMMdd")) {
			estpc071A.enviarMensagem("adt", "");
			validacaoMensagem();
			return;
		}
		if (estpc071A.getAfi() < 1994) {
			estpc071A.enviarMensagem("afi", "");
			validacaoMensagem();
			return;
		}
		if (sisldat8.datini > sisldat8.datfim) {
			estpc071A.enviarMensagem("adt", "");
			validacaoMensagem();
			return;
		}

		tempo = sisldat8.datfim - sisldat8.datini;

		mod = tabm[sessao.getSisgsisp().getVar()];
		tip = 98;

		dat = sisldat8.datini;

		motid2 = motida;

		da2 = sisldat8.datfim;
		funcoes.tabssup2(sessao);
		if (!(estpc071A.getOpcao().equals("C") || estpc071A.getOpcao().equals("I"))) {
			estpc071A.enviarMensagem("opcao", "OPCAO INVALIDA");
			validacaoMensagem();
			return;
		}
		esttc071.setDtini(sisldat8.datini);
		esttc071.setDtini((int) funcoes.sissd002(esttc071.getDtini()));
		esttc071.setDtfim(sisldat8.datfim);
		esttc071.setDtfim((int) funcoes.sissd002(esttc071.getDtfim()));
		k = 1;
		esttc071.setMensagem("");
		if (estpc071A.getOpcao().equals("I")) {
			l = 50;
		} else {
			l = 13;
		}
		if (estpc071A.getMat() > 0) {
			sislct01.tt1 = 18;
			sislct01.cc1 = estpc071A.getMat();
			sislct01.vt1 = funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
			if (sislct01.vt1.equals("@")) {
				estpc071A.setMensagemSaida(" REGISTRO NAO ENCONTRADO");
				validacaoMensagem();
				return;
			}
			soma();
			if (estpc071A.getOpcao().equals("C")) {
				tela();
			} else {
				tela();
			}
			return;
		}
		ttt = 9999999;
		soma();
		sessao.setAtributo("ESTPC071", this);
		result.include("esttc071", esttc071);
		esttc071.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private void soma() throws ParseException {
		while (vwCadest.pesquisaMotidaFaixa(mod, tip, estpc071A.getMat(), dat, da2)) {
			// 190
			if (vwCadest.fimDados()) {
				if (l == 13) {
					tela();
				} else {
					tela();
				}
			}
			if (estpc071A.getMat() > 0) {
				if (!(vwCadest.getMatriculaFunc() == estpc071A.getMat())) {
					continue;
				}
			}
			if (l == 13) {
				if (esttc071.getMat0(k) > 0 && esttc071.getMat0(k) != vwCadest.getMatriculaFunc()) {
					k += 1;
				}

				esttc071.setMat0(k, vwCadest.getMatriculaFunc());
				for (i = 1; i <= 10; i++) {

					esttc071.setTra0(i, k, (int) (esttc071.getTra0(i, k) + vwCadest.getQuantTrans(i)));
					esttc071.setTra0(11, k, (int) (esttc071.getTra0(11, k) + vwCadest.getQuantTrans(i)));
					esttc071.setTra0(i, 14, (int) (esttc071.getTra0(i, 14) + vwCadest.getQuantTrans(i)));
					esttc071.setTra0(11, 14, (int) (esttc071.getTra0(11, 14) + vwCadest.getQuantTrans(i)));
				}
			} else {
				if (report.getMat1(k) > 0 && report.getMat1(k) != vwCadest.getMatriculaFunc()) {
					k += 1;
				}

				report.setMat1(k, vwCadest.getMatriculaFunc());
				for (i = 1; i <= 10; i++) {

					tra1[i][k] = (int) (tra1[i][k] + vwCadest.getQuantTrans(i));
					tra1[11][k] = (int) (tra1[11][k] + vwCadest.getQuantTrans(i));
					tra1[i][51] = (int) (tra1[i][51] + vwCadest.getQuantTrans(i));
					tra1[11][51] = (int) (tra1[11][51] + vwCadest.getQuantTrans(i));
				}
			}
			if (k == l) {
				if (estpc071A.getOpcao().equals("C")) {
					tela();
				} else {
					tela();
				}
			}

			if (vwCadest.totalRegistros() == 0) {
				estpc071A.setMensagemSaida("INTERVALO INEXISTENTE");
				validacaoMensagem();
				return;
			}
		}
	}

	private void tela() {
		estpc071A.setMensagemSaida("CONSULTA EFETUADA OK");

		esttc071.receberTela(false, result);
		for (i = 1; i <= 11; i++) {
			for (k = 1; k <= 13; k++) {
				esttc071.setTra0(i, k, 0);
			}
		}
		for (int i1 = 1; i1 <= 0; i1++) {
			esttc071.setMat0(i1, 0);
		}
		k = 1;
	}

	private void impr() throws JRException, ParseException, FileNotFoundException {
		estpc071A.setMensagemSaida("EMISSAO EFETUADA OK");
		// RELATORIO
		report.gravaRelatorio(1);
		report.imprimir();

		// RELATORIO
		for (i = 1; i <= 11; i++) {
			for (k = 1; k <= 50; k++) {
				tra1[i][k] = 0;
			}
		}
		for (int i1 = 1; i1 <= 0; i1++) {
			report.setMat1(i1, 0);
		}
		k = 1;
	}

	private void restaurarEstados(Estpc071A pestpc071A, Esttc071 pesttc071) {
		this.estpc071Anterior = (Estpc071) sessao.getAtributo("ESTPC071");
		if (pestpc071A != null) {
			estpc071A = pestpc071A;
		} else {
			estpc071A = this.estpc071Anterior.estpc071A;
		}
		estpc071A.setSessao(sessao);
		if (pesttc071 != null) {
			esttc071 = pesttc071;
		} else {
			esttc071 = this.estpc071Anterior.esttc071;
		}
		esttc071.setSessao(sessao);
		faseproc = this.estpc071Anterior.faseproc;
		sislac01 = this.estpc071Anterior.sislac01;
		sislct01 = this.estpc071Anterior.sislct01;
		sisldat8 = this.estpc071Anterior.sisldat8;
		sisll001 = this.estpc071Anterior.sisll001;
	}

	private void validacaoMensagem() {
		estpc071A.setNavegar("../estpc071/executar");
		result.include("estpc071A", estpc071A);
		sessao.setAtributo("ESTPC071", this);
		estpc071A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}
}
